Hi
2018-01-06 13:06 GMT+01:00 Norbert Hartl norbert@hartl.name:
Am 05.01.2018 um 16:53 schrieb Clément Bera bera.clement@gmail.com:
On Fri, Jan 5, 2018 at 4:05 PM, Norbert Hartl norbert@hartl.name wrote:
You mean
<primitive: 174 error: ec> self isReadOnlyObject ifTrue: [(ModificationForbidden for: self atInstVar: index with: anObject) signal] ifFalse: [ self primitiveFailed ] ?
Norbert
yes something like that.
Same thing for Object>>#at:put:, floatAt:put: and so on.
I’m working on it and came by
Object>>#primitiveChangeClassTo:
and I wonder what would be the approach here. The ModificationForbidden/NoModificationError seems to be tight to an index. What would be the case for a class change? Another Exception class?
In that case I would introduce hierarchy:
ModificationForbidden StateModificationForbidden ClassModificationForbidden
How is that solved in VW?
Norbert
Am 05.01.2018 um 14:22 schrieb Clément Bera bera.clement@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@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