Well I actually wrote the fix as<div><br><div><div>primitiveExecuteMethod</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>&quot;receiver, args, then method are on top of stack. Execute method against receiver and args&quot;</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>&quot;Recursive xeq affects successFlag&quot;</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. &nbsp;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">&lt;<a href="mailto:johnmci@smalltalkconsulting.com">johnmci@smalltalkconsulting.com</a>&gt;</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&#39;s defined as<br>
<br>
sqInt success(sqInt);<br>
<br>
but it&#39;s written as<br>
success: successValue<br>
 &nbsp; &nbsp; &nbsp; &nbsp;successFlag := successValue &amp; successFlag.<br>
<br>
which resolves as<br>
sqInt success(sqInt successValue) {<br>
register struct foo * foo = &amp;fum;<br>
 &nbsp; &nbsp; &nbsp; &nbsp;foo-&gt;successFlag = successValue &amp;&amp; foo-&gt;successFlag;<br>
}<br>
or<br>
sqInt success(sqInt successValue) {<br>
 &nbsp; &nbsp; &nbsp; &nbsp;foo-&gt;successFlag = successValue &amp;&amp; foo-&gt;successFlag;<br>
}<br>
or<br>
sqInt success(sqInt successValue) {<br>
 &nbsp; &nbsp; &nbsp; &nbsp;successFlag = successValue &amp;&amp; successFlag;<br>
}<br>
<br>
<br>
so what does<br>
&nbsp;[ ... ^ 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 &lt;<a href="mailto:johnmci@smalltalkconsulting.com" target="_blank">johnmci@smalltalkconsulting.com</a>&gt;<br>
Corporate Smalltalk Consulting Ltd. &nbsp;<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>