Well I actually wrote the fix as<div><br><div><div>primitiveExecuteMethod</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>"receiver, args, then method are on top of stack. Execute method against receiver and args"</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>newMethod := self popStack.</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>primitiveIndex := self primitiveIndexOf: newMethod.</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>self success: argumentCount - 1 = (self argumentCountOf: newMethod).</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>successFlag</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>ifTrue: [argumentCount := argumentCount - 1.</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>self executeNewMethod.</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>"Recursive xeq affects successFlag"</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>successFlag := true]</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>ifFalse: [self unPop: 1]</div><div><br></div><div>to agree with the perform code. The fix is to ensure that successFlag is true.</div>
<br><div class="gmail_quote">On Sun, Oct 26, 2008 at 10:45 PM, John M McIntosh <span dir="ltr"><<a href="mailto:johnmci@smalltalkconsulting.com">johnmci@smalltalkconsulting.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Er, my only comment on this is that although<br>
in C it's defined as<br>
<br>
sqInt success(sqInt);<br>
<br>
but it's written as<br>
success: successValue<br>
successFlag := successValue & successFlag.<br>
<br>
which resolves as<br>
sqInt success(sqInt successValue) {<br>
register struct foo * foo = &fum;<br>
foo->successFlag = successValue && foo->successFlag;<br>
}<br>
or<br>
sqInt success(sqInt successValue) {<br>
foo->successFlag = successValue && foo->successFlag;<br>
}<br>
or<br>
sqInt success(sqInt successValue) {<br>
successFlag = successValue && successFlag;<br>
}<br>
<br>
<br>
so what does<br>
[ ... ^ self success: true]<br>
actually return?<div><div></div><div class="Wj3C7c"><br>
<br>
<br>
On Oct 26, 2008, at 7:13 PM, Eliot Miranda wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Perhaps #primitiveExecuteMethod should end with an explicit [ ... ^ self success: true] in its true-branch (this is just a thought, I have as yet not<br>
</blockquote>
<br></div></div><font color="#888888">
--<br>
===========================================================================<br>
John M. McIntosh <<a href="mailto:johnmci@smalltalkconsulting.com" target="_blank">johnmci@smalltalkconsulting.com</a>><br>
Corporate Smalltalk Consulting Ltd. <a href="http://www.smalltalkconsulting.com" target="_blank">http://www.smalltalkconsulting.com</a><br>
===========================================================================<br>
<br>
<br>
<br>
<br>
</font></blockquote></div><br></div></div>