<div dir="ltr">If things are not going better this evening, I&#39;ll retract some of these changes.<br></div><div class="gmail_extra"><br><div class="gmail_quote">2016-04-24 22:31 GMT+02:00  <span dir="ltr">&lt;<a href="mailto:commits@source.squeak.org" target="_blank">commits@source.squeak.org</a>&gt;</span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
Nicolas Cellier uploaded a new version of VMMaker to project VM Maker:<br>
<a href="http://source.squeak.org/VMMaker/VMMaker.oscog-nice.1840.mcz" rel="noreferrer" target="_blank">http://source.squeak.org/VMMaker/VMMaker.oscog-nice.1840.mcz</a><br>
<br>
==================== Summary ====================<br>
<br>
Name: VMMaker.oscog-nice.1840<br>
Author: nice<br>
Time: 24 April 2016, 10:30:31.797 pm<br>
UUID: 218875e3-8515-4804-a608-9e3228ffb843<br>
Ancestors: VMMaker.oscog-nice.1839<br>
<br>
Oops, correct the inversion of type inference for left/right shift.<br>
Protect the type of most used integerValueOf:/isIntegerObject:<br>
<br>
This restore good health for CogSpur32 tests, but not yet for CogSpur64 which has a problem with SmallFloat, and definitely not for CogV3 which now fails to start.<br>
<br>
=============== Diff against VMMaker.oscog-nice.1839 ===============<br>
<br>
Item was changed:<br>
  ----- Method: CCodeGenerator&gt;&gt;returnTypeForSend:in: (in category &#39;type inference&#39;) -----<br>
  returnTypeForSend: sendNode in: aTMethod<br>
        &quot;Answer the return type for a send.  Absent sends default to #sqInt.<br>
         The inferred type should match as closely as possible the C type of<br>
         generated expessions so that inlining would not change the expression.&quot;<br>
        | sel methodOrNil |<br>
        methodOrNil := self anyMethodNamed: (sel := sendNode selector).<br>
        (methodOrNil notNil and: [methodOrNil returnType notNil]) ifTrue:<br>
                [^self baseTypeForType: methodOrNil returnType].<br>
        ^kernelReturnTypes<br>
                at: sel<br>
                ifAbsent:<br>
                        [sel<br>
                                caseOf: {<br>
+                               [#integerValueOf:]              -&gt;      [#sqInt].<br>
+                               [#isIntegerObject:]             -&gt;      [#int].<br>
                                [#negated]                              -&gt;      [self promoteArithmeticTypes: (self typeFor: sendNode receiver in: aTMethod) and: #int].<br>
                                [#+]                                    -&gt;      [self typeForArithmetic: sendNode in: aTMethod].<br>
                                [#-]                                            -&gt;      [self typeForArithmetic: sendNode in: aTMethod].<br>
                                [#*]                                    -&gt;      [self typeForArithmetic: sendNode in: aTMethod].<br>
                                [#/]                                            -&gt;      [self typeForArithmetic: sendNode in: aTMethod].<br>
                                [#//]                                   -&gt;      [self typeForArithmetic: sendNode in: aTMethod].<br>
                                [#\\]                                   -&gt;      [self typeForArithmetic: sendNode in: aTMethod].<br>
+                               [#&gt;&gt;]                                   -&gt;      [self<br>
-                               [#&gt;&gt;]                                   -&gt;      [self typeForArithmetic: sendNode in: aTMethod].<br>
-                               [#&lt;&lt;]                                   -&gt;      [self<br>
                                                                                                promoteArithmeticTypes: (self unsignedTypeForIntegralType: (self typeFor: sendNode receiver in: aTMethod))<br>
                                                                                                and: (self typeFor: sendNode args first in: aTMethod)].<br>
+                               [#&lt;&lt;]                                   -&gt;      [self typeForArithmetic: sendNode in: aTMethod].<br>
                                [#rem:]                                 -&gt;      [self typeForArithmetic: sendNode in: aTMethod].<br>
                                [#quo:]                                 -&gt;      [self typeForArithmetic: sendNode in: aTMethod].<br>
                                [#addressOf:]                   -&gt;      [(self typeFor: sendNode receiver in: aTMethod)<br>
                                                                                                ifNil: [#sqInt]<br>
                                                                                                ifNotNil: [:type| type, (type last isLetter ifTrue: [&#39; *&#39;] ifFalse: [&#39;*&#39;])]].<br>
                                [#at:]                                  -&gt;      [self typeForDereference: sendNode in: aTMethod].<br>
                                [#bitAnd:]                              -&gt;      [self typeForArithmetic: sendNode in: aTMethod].<br>
                                [#bitOr:]                               -&gt;      [self typeForArithmetic: sendNode in: aTMethod].<br>
                                [#bitXor:]                              -&gt;      [self typeForArithmetic: sendNode in: aTMethod].<br>
                                [#bitClear:]                            -&gt;      [self typeForArithmetic: sendNode in: aTMethod].<br>
                                [#bitInvert32]                  -&gt;      [#&#39;unsigned int&#39;].<br>
                                [#bitInvert64]                  -&gt;      [self promoteArithmeticTypes: (self typeFor: sendNode receiver in: aTMethod) and: #int].<br>
                                [#byteSwap32]                   -&gt;      [#&#39;unsigned int&#39;].<br>
                                [#byteSwap64]                   -&gt;      [#&#39;unsigned long long&#39;].<br>
                                [#byteSwapped32IfBigEndian:]    -&gt;      [#&#39;unsigned int&#39;].<br>
                                [#byteSwapped64IfBigEndian:]    -&gt;      [#&#39;unsigned long long&#39;].<br>
                                [#=]                                    -&gt;      [#int].<br>
                                [#~=]                                   -&gt;      [#int].<br>
                                [#==]                                   -&gt;      [#int].<br>
                                [#~~]                                   -&gt;      [#int].<br>
                                [#&lt;]                                    -&gt;      [#int].<br>
                                [#&lt;=]                                   -&gt;      [#int].<br>
                                [#&gt;]                                    -&gt;      [#int].<br>
                                [#&gt;=]                                   -&gt;      [#int].<br>
                                [#between:and:]         -&gt;      [#int].<br>
                                [#anyMask:]                             -&gt;      [#int].<br>
                                [#allMask:]                             -&gt;      [#int].<br>
                                [#noMask:]                              -&gt;      [#int].<br>
                                [#isNil]                                        -&gt;      [#int].<br>
                                [#notNil]                               -&gt;      [#int].<br>
                                [#&amp;]                                    -&gt;      [#int].<br>
                                [#|]                                            -&gt;      [#int].<br>
                                [#not]                                  -&gt;      [#int].<br>
                                [#asFloat]                              -&gt;      [#double].<br>
                                [#atan]                                 -&gt;      [#double].<br>
                                [#exp]                                  -&gt;      [#double].<br>
                                [#log]                                  -&gt;      [#double].<br>
                                [#sin]                                  -&gt;      [#double].<br>
                                [#sqrt]                                 -&gt;      [#double].<br>
                                [#asLong]                               -&gt;      [#long].<br>
                                [#asInteger]                    -&gt;      [#sqInt].<br>
                                [#asUnsignedInteger]    -&gt;      [#usqInt].<br>
                                [#asUnsignedLong]               -&gt;      [#&#39;unsigned long&#39;].<br>
                                [#asVoidPointer]                -&gt;      [#&#39;void *&#39;].<br>
                                [#signedIntToLong]              -&gt;      [#usqInt]. &quot;c.f. generateSignedIntToLong:on:indent:&quot;<br>
                                [#signedIntToShort]     -&gt;      [#usqInt]. &quot;c.f. generateSignedIntToShort:on:indent:&quot;<br>
                                [#cCoerce:to:]                  -&gt;      [sendNode args last value].<br>
                                [#cCoerceSimple:to:]    -&gt;      [sendNode args last value].<br>
                                [#sizeof:]                              -&gt;      [#&#39;unsigned long&#39;]. &quot;Technically it&#39;s a size_t but it matches unsigned long on target architectures so far...&quot;<br>
                                [#ifTrue:ifFalse:]              -&gt;      [self typeForConditional: sendNode in: aTMethod].<br>
                                [#ifFalse:ifTrue:]              -&gt;      [self typeForConditional: sendNode in: aTMethod].<br>
                                [#ifTrue:]                              -&gt;      [self typeForConditional: sendNode in: aTMethod].<br>
                                [#ifFalse:]                             -&gt;      [self typeForConditional: sendNode in: aTMethod] }<br>
                                otherwise: &quot;If there /is/ a method for sel but its retrn type is as yet unknown we /mustn&#39;t/ default it.<br>
                                                        We can only default unbound selectors.&quot;<br>
                                        [methodOrNil ifNotNil: [nil] ifNil: [#sqInt]]]!<br>
<br>
</blockquote></div><br></div>