<div dir="ltr">Hi.<div><br></div><div>Look at following example:</div><div><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><div>p1 := 10@20.</div></div><div><div>p2 := 40@50.</div></div><div>p1 becomeForward: p2.<br></div><div>p1 == p2 "==> true"</div></blockquote><div><br></div><div>It shows that become operation do not modifies p1 instance. It just replaces value in all references.</div><div>Now if p1 will be read only object then become will fail:</div><div><br></div><div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div>p1 := 10@20.</div><div>p2 := 40@50.</div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div>p1 beReadOnlyObject.</div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div>p1 becomeForward: p2. "==> fail by modification error"<br></div><div><br></div></blockquote>My question is why this logic is valid? As simple user I do not see how become modifies the state of receiver p1.</div><div><br></div><div>And what I expect is failing on another case which surprisingly do not fail:</div><div><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><div>p1 := 10@20.</div></div><div><div>p2 := 40@50.</div></div><div><div>array := {  p1. p2}.</div></div><div><div>array beReadOnlyObject.</div></div><div><div>p1 becomeForward: p2.</div></div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div>array = {40@50. 40@50} "==true"</div><div><br></div></blockquote>Here become operation modifies state of read only object. But it not fails.<div><br></div><div>Best regards,</div><div>Denis</div></div>