[Vm-dev] Bug in #instVarAt:put: for read-only objects
Norbert Hartl
norbert at hartl.name
Fri Jan 5 15:05:34 UTC 2018
You mean
<primitive: 174 error: ec>
self isReadOnlyObject
ifTrue: [(ModificationForbidden for: self atInstVar: index with: anObject) signal]
ifFalse: [ self primitiveFailed ]
?
Norbert
> Am 05.01.2018 um 14:22 schrieb Clément Bera <bera.clement at gmail.com>:
>
> 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 <mailto: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/ <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/a84fd12c/attachment.html>
More information about the Vm-dev
mailing list