<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Oct 20, 2015 at 2:50 PM, Esteban Lorenzano <span dir="ltr">&lt;<a href="mailto:estebanlm@gmail.com" target="_blank">estebanlm@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"> <br><div style="word-wrap:break-word"><br><div><blockquote type="cite"><div>On 20 Oct 2015, at 23:35, Eliot Miranda &lt;<a href="mailto:eliot.miranda@gmail.com" target="_blank">eliot.miranda@gmail.com</a>&gt; wrote:</div><br><div><div dir="ltr" style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">Hi Esteban,<br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Oct 20, 2015 at 2:23 PM, Esteban Lorenzano<span> </span><span dir="ltr">&lt;<a href="mailto:estebanlm@gmail.com" target="_blank">estebanlm@gmail.com</a>&gt;</span><span> </span>wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"> <br><div style="word-wrap:break-word"><br><div><blockquote type="cite"><div>On 20 Oct 2015, at 22:59, John McIntosh &lt;<a href="mailto:johnmci@smalltalkconsulting.com" target="_blank">johnmci@smalltalkconsulting.com</a>&gt; wrote:</div><br><div><div dir="ltr">Ok, you know you are using maybeInlinePositive32BitIntegerFor for BOTH unsigned and signed integers? That to me rings alarm bells, so do you need maybeInlinePositive32BitIntegerForSignedInteger or maybeInlinePositive32BitIntegerForUnSignedInteger  or always cast the incoming value to an unsigned integer, or is it signed? If so are you sure you understand the math involved and the possible input values? </div></div></blockquote><div><br></div><div>I’m not using maybeInlinePositive32BitIntegerFor for anything. Is Eliot who is doing it :)</div><div>But yes, I thought that first, then I followed the logic and figured out the intent was kept just changing the input type… but I might be wrong… Eliot should know better :)</div></div></div></blockquote><div><br></div><div>what&#39;s the context?</div></div></div></div></div></blockquote><div><br></div><div>I spotted the problem when calling </div><div><br></div><div>sendInvokeCallbackContext:</div><div><br></div><div>in concrete, when doing this: </div><div><br></div><div><div><span style="white-space:pre-wrap">        </span>self push: (self positiveMachineIntegerFor: vmCallbackContext asUnsignedInteger).</div><div><br></div><div>positiveMachineIntegerFor: always inlines the callback context (answering then a random position in memory).</div><div><br></div><div>and after analysis, I found that the casting of oop with “unsigned long” makes that the two comparisons in:</div><div><br></div><div><br></div><div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span style="white-space:pre-wrap">        </span><span style="color:rgb(187,44,162)">if</span> ((integerValue &gt;= <span style="color:rgb(39,42,216)">0</span>)</div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span style="white-space:pre-wrap">        </span> &amp;&amp; ((integerValue ^ (integerValue &lt;&lt; <span style="color:rgb(39,42,216)">1</span>)) &gt;= <span style="color:rgb(39,42,216)">0</span>)) {</div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span style="white-space:pre-wrap">                </span>object3 = ((integerValue &lt;&lt; <span style="color:rgb(39,42,216)">1</span>) | <span style="color:rgb(39,42,216)">1</span>);</div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span style="white-space:pre-wrap">                </span><span style="color:rgb(187,44,162)">goto</span> l12;</div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span style="white-space:pre-wrap">        </span>}</div></div><div><br></div><div>always evaluates to true, no matter the value it receives.</div></div></div></div></blockquote><div><br></div><div>Right.  So  <span style="font-size:14px;font-family:Menlo">(integerValue ^ (integerValue &lt;&lt; </span><span style="font-size:14px;font-family:Menlo;color:rgb(39,42,216)">1</span><span style="font-size:14px;font-family:Menlo">)) &gt;= </span><span style="font-size:14px;font-family:Menlo;color:rgb(39,42,216)">0 </span>must read <span style="font-size:14px;font-family:Menlo">(long)(integerValue ^ (integerValue &lt;&lt; </span><span style="font-size:14px;font-family:Menlo;color:rgb(39,42,216)">1</span><span style="font-size:14px;font-family:Menlo">)) &gt;= </span><font color="#272ad8" face="Menlo">0</font>.  So we probably need isIntegerValue: to read<br><br>isIntegerValue: intValue</div><div><div><span class="" style="white-space:pre">        </span>&quot;Answer if the given value can be represented as a Smalltalk integer value.</div><div><span class="" style="white-space:pre">        </span> In C, use a shift and XOR to set the sign bit if and only if the top two bits of the given</div><div><span class="" style="white-space:pre">        </span> value are the same, then test the sign bit. Note that the top two bits are equal for</div><div><span class="" style="white-space:pre">        </span> exactly those integers in the range that can be represented in 31-bits or 63-bits.&quot;</div><div><span class="" style="white-space:pre">        </span>&lt;api&gt;</div><div><span class="" style="white-space:pre">        </span>^self</div><div><span class="" style="white-space:pre">                </span>cCode: [(intValue bitXor: (intValue &lt;&lt; 1)) <b>asInteger</b> &gt;= 0]</div><div><span class="" style="white-space:pre">                </span>inSmalltalk: [intValue &gt;= 16r-40000000 and: [intValue &lt;= 16r3FFFFFFF]]</div></div><div><br></div><div>I&#39;ll be able to test thing change soon.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div style="word-wrap:break-word"><div><div><div><br></div><div>Esteban</div></div><div><br></div><div><br></div><br><blockquote type="cite"><div><div dir="ltr" style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><div class="gmail_extra"><div class="gmail_quote"><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div style="word-wrap:break-word"><div><div><br></div><div>Esteban</div><div><br></div><br><blockquote type="cite"><div><div dir="ltr"><div><br><div><br></div><div><br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Oct 19, 2015 at 9:31 AM, Esteban Lorenzano<span> </span><span dir="ltr">&lt;<a href="mailto:estebanlm@gmail.com" target="_blank">estebanlm@gmail.com</a>&gt;</span><span> </span>wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"> <br><div style="word-wrap:break-word"><div>Hi, </div><div><br></div><div>Does anyone tested Alien on Spur and &quot;El capitan&quot;? specifically callbacks?</div><div>For me, a completely broken :(</div><div><br></div><div>1) this structure (in maybeInlinePositive32BitIntegerFor: and others): </div><div><br></div><div><div><span style="white-space:pre-wrap">        </span>(integerValue &gt;= 0</div><div><span style="white-space:pre-wrap">        </span><span> </span>and: [objectMemory isIntegerValue: integerValue]) ifTrue:</div><div><span style="white-space:pre-wrap">                </span>[^objectMemory integerObjectOf: integerValue].</div></div><div><br></div><div>Does not works if “integer value” is an unsigned long, because compiler assumes it will always be true, then remove the if, then answers a wrong value. </div><div><br></div><div>2) <span style="color:rgb(120,73,42);font-family:Menlo;font-size:11px">assertCStackWellAligned </span>always fail. No idea why because if does not says anything, just jmp back to the regular flow. </div><div><br></div><div>3) finally, <span style="color:rgb(79,129,135);font-family:Menlo;font-size:11px">ceCaptureCStackPointers </span>also fails… this can be because (2) or because other reasons (it also jmps back so no clue) (method generateCaptureCStackPointers: clarifies is a hack, so I suppose it stopped to work). </div><div><br></div><div>I guess solution of (1) is easy: argument number just has to be a sqLong instead an unsigned long. </div><div><br></div><div>But for 2 and 3 I have no idea where to start.</div><div><br></div><div>Does anyone has an idea?</div><div><br></div><div>Esteban</div><div><br></div></div><br></blockquote></div><br><br clear="all"><div><br></div>--<span> </span><br><div><div dir="ltr"><div><div dir="ltr">===========================================================================<br>John M. McIntosh. Corporate Smalltalk Consulting Ltd <a href="https://www.linkedin.com/in/smalltalk" target="_blank">https://www.linkedin.com/in/smalltalk</a><br>===========================================================================<br></div></div></div></div></div></div></blockquote></div><br></div><br></blockquote></div><br><br clear="all"><div><br></div>--<span> </span><br><div><div dir="ltr"><div><span style="font-size:small;border-collapse:separate"><div>_,,,^..^,,,_<br></div><div>best, Eliot</div></span></div></div></div></div></div></div></blockquote></div><br></div><br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div><span style="font-size:small;border-collapse:separate"><div>_,,,^..^,,,_<br></div><div>best, Eliot</div></span></div></div></div>
</div></div>