<div dir="ltr"><div>Hi</div><div><br></div>2018-01-06 13:06 GMT+01:00 Norbert Hartl <span dir="ltr"><<a href="mailto:norbert@hartl.name" target="_blank">norbert@hartl.name</a>></span>:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Am 05.01.2018 um 16:53 schrieb Clément Bera <<a href="mailto:bera.clement@gmail.com" target="_blank">bera.clement@gmail.com</a>>:<br><div style="word-wrap:break-word;line-break:after-white-space"><div><blockquote type="cite"><span style="font-family:Helvetica;font-size:14px">On Fri, Jan 5, 2018 at 4:05 PM, Norbert Hartl</span><span class="m_-946257585969897029Apple-converted-space" style="font-family:Helvetica;font-size:14px"> </span><span dir="ltr" style="font-family:Helvetica;font-size:14px"><<a href="mailto:norbert@hartl.name" target="_blank">norbert@hartl.name</a>></span><span class="m_-946257585969897029Apple-converted-space" style="font-family:Helvetica;font-size:14px"> </span><span style="font-family:Helvetica;font-size:14px">wro</span><wbr style="font-family:Helvetica;font-size:14px"><span style="font-family:Helvetica;font-size:14px">te:</span><br><div><div class="gmail_quote" style="font-family:Helvetica;font-size:14px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"> <br><div style="word-wrap:break-word;line-break:after-white-space">You mean<div><br></div><div><div><span class="m_-946257585969897029m_8231836668159255930Apple-tab-span" style="white-space:pre-wrap">      </span><primitive: 174 error: ec></div><div><span class="m_-946257585969897029m_8231836668159255930Apple-tab-span" style="white-space:pre-wrap">      </span>self isReadOnlyObject </div><div><span class="m_-946257585969897029m_8231836668159255930Apple-tab-span" style="white-space:pre-wrap">               </span>ifTrue: [(ModificationForbidden for: self atInstVar: index with: anObject) signal]</div><div><span class="m_-946257585969897029m_8231836668159255930Apple-tab-span" style="white-space:pre-wrap">            </span>ifFalse: [ self primitiveFailed ]</div><div>?</div><div><br></div><div>Norbert</div></div></div></blockquote><div><br></div><div>yes something like that.</div><div><br></div><div><br></div><div>Same thing for Object>>#at:put:, floatAt:put: and so on.</div></div></div></blockquote><div><br></div>I’m working on it and came by</div><div><br></div><div>Object>>#<wbr>primitiveChangeClassTo:</div><div><br></div><div>and I wonder what would be the approach here. The ModificationForbidden/<wbr>NoModificationError seems to be tight to an index. What would be the case for a class change? Another Exception class? </div></div></blockquote><div><br></div><div>In that case I would introduce hierarchy:</div></div></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div class="gmail_extra"><div class="gmail_quote"><div>ModificationForbidden</div></div></div><div class="gmail_extra"><div class="gmail_quote"><div>   StateModificationForbidden</div></div></div><div class="gmail_extra"><div class="gmail_quote"><div>   ClassModificationForbidden </div></div></div></blockquote><div class="gmail_extra"><div class="gmail_quote"><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word;line-break:after-white-space"><div>How is that solved in VW? </div><div><br></div><div>Norbert</div><div><br><blockquote type="cite"><div><div class="gmail_quote" style="font-family:Helvetica;font-size:14px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word;line-break:after-white-space"><div><div><br><blockquote type="cite"><div>Am 05.01.2018 um 14:22 schrieb Clément Bera <<a href="mailto:bera.clement@gmail.com" target="_blank">bera.clement@gmail.com</a>>:</div><br class="m_-946257585969897029m_8231836668159255930Apple-interchange-newline"><div><div dir="ltr"><div>Hi,</div><div><br></div><div>No this is not a bug.</div><div><br></div>This needs to be handled in the primitive failure code in the image, the method should be something like that :<div><br><div><div><font face="monospace, monospace">Object>>instVarAt: index put: anObject</font></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap">   </span><primitive: 174 error: ec></font></div><div><font face="monospace, monospace">       <span class="m_-946257585969897029Apple-converted-space"> </span>self isReadOnlyObject ifTrue: [(ModificationForbidden for: self atInstVar: index with: anObject) signal]</font></div><div><font face="monospace, monospace"><span style="white-space:pre-wrap"> </span>self primitiveFailed</font></div><div><br></div><div>All primitive fall-back code triggering object mutation should be rewritten this way, especially primitives such as #at:put:, #instVarAt:put:, etc.</div><div><br></div></div></div><div>Cheers</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jan 5, 2018 at 1:42 PM, Norbert Hartl<span class="m_-946257585969897029Apple-converted-space"> </span><span dir="ltr"><<a href="mailto:norbert@hartl.name" target="_blank">norbert@hartl.name</a>></span><span class="m_-946257585969897029Apple-converted-space"> </span>wro<wbr>te:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"> <br><div style="word-wrap:break-word;line-break:after-white-space">If I do <div><br></div><div><div>(#foo -> #bar)</div><div><span class="m_-946257585969897029m_8231836668159255930m_-2406158539713268726Apple-tab-span" style="white-space:pre-wrap">  </span>beReadOnlyObject;</div><div><span class="m_-946257585969897029m_8231836668159255930m_-2406158539713268726Apple-tab-span" style="white-space:pre-wrap">       </span>value: #baz</div></div><div><br></div><div>it throws</div><div><br></div><div><b>ModificationForbidden:  #foo->#bar is read-only, hence its field 2 cannot be modified with #baz</b></div><div><br></div><div> which is as expected. But if I do</div><div><br></div><div><div>(#foo -> #bar)</div><div><span class="m_-946257585969897029m_8231836668159255930m_-2406158539713268726Apple-tab-span" style="white-space:pre-wrap">   </span>beReadOnlyObject;</div><div><span class="m_-946257585969897029m_8231836668159255930m_-2406158539713268726Apple-tab-span" style="white-space:pre-wrap">       </span>instVarNamed: #value put: #baz</div></div><div><br></div><div>I get</div><div><br></div><div><b>PrimitiveFailed: primitive #instVarAt:put: in Association failed</b></div><div><br></div><div>I think this a bug, no?</div><div><br></div><div>Norbert</div></div><br></blockquote></div><br><br clear="all"><div><br></div>--<span class="m_-946257585969897029Apple-converted-space"> </span><br><div class="m_-946257585969897029m_8231836668159255930gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><span style="font-size:12.8px">Clément Béra</span><div style="font-size:12.8px">Pharo consortium engineer</div><div style="font-size:12.8px"><a href="https://clementbera.wordpress.com/" target="_blank">https://clementbera.wordpress.<wbr>com/</a><br></div><div style="font-size:12.8px"><span style="line-height:16px">Bâtiment B 40, avenue Halley 59650 </span><span style="font-weight:bold;line-height:16px">Villeneuve d'Ascq</span></div></div></div></div></div></blockquote></div><br></div></div><br></blockquote></div><br style="font-family:Helvetica;font-size:14px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><br clear="all" style="font-family:Helvetica;font-size:14px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><div style="font-family:Helvetica;font-size:14px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><br></div><span style="font-family:Helvetica;font-size:14px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important">--<span class="m_-946257585969897029Apple-converted-space"> </span></span><br style="font-family:Helvetica;font-size:14px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><div class="m_-946257585969897029gmail_signature" data-smartmail="gmail_signature" style="font-family:Helvetica;font-size:14px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><div dir="ltr"><span style="font-size:12.8px">Clément Béra</span><div style="font-size:12.8px">Pharo consortium engineer</div><div style="font-size:12.8px"><a href="https://clementbera.wordpress.com/" target="_blank">https://clementbera.wordpress.<wbr>com/</a><br></div><div style="font-size:12.8px"><span style="line-height:16px">Bâtiment B 40, avenue Halley 59650 </span><span style="font-weight:bold;line-height:16px">Villeneuve d'Ascq</span></div></div></div></div></blockquote></div><br></div><br></blockquote></div><br></div></div>