<body><div id="__MailbirdStyleContent" style="font-size: 10pt;font-family: Arial;color: #000000">
                                        Sorry for the wrong author initials "TraitsTest". I still had a debugger opened that replaced the author initials during a test run... :-)<div><br></div><div>Best,</div><div>Marcel</div><div class="mb_sig"></div><blockquote class="history_container" type="cite" style="border-left-style:solid;border-width:1px; margin-top:20px; margin-left:0px;padding-left:10px;">
                        <p style="color: #AAAAAA; margin-top: 10px;">Am 02.09.2019 17:11:10 schrieb commits@source.squeak.org <commits@source.squeak.org>:</p><div style="font-family:Arial,Helvetica,sans-serif">Marcel Taeumel uploaded a new version of Compiler to project The Trunk:<br>http://source.squeak.org/trunk/Compiler-TraitTest.409.mcz<br><br>==================== Summary ====================<br><br>Name: Compiler-TraitTest.409<br>Author: TraitTest<br>Time: 2 September 2019, 5:10:57.854301 pm<br>UUID: b13d5a17-2a64-8048-9e67-c70d875eb5e6<br>Ancestors: Compiler-ct.408<br><br>Fixes #markerOrNilFor: comment (SistaV1) and implementation (V3). returnSelf and returnTop got mixed up.<br><br>=============== Diff against Compiler-ct.408 ===============<br><br>Item was changed:<br>  ----- Method: EncoderForSistaV1 class>>markerOrNilFor: (in category 'compiled method support') -----<br>  markerOrNilFor: aMethod<br>         "If aMethod is a marker method, answer the symbol used to mark it.  Otherwise<br>     answer nil.  What is a marker method?  It is method with body like <br>                  'self subclassResponsibility' or '^ self subclassResponsibility' <br>      used to indicate ('mark') a special property.<br>  <br>    Marker methods compile to two bytecode forms, this:<br>           self<br>                  send: <literal 1=""><br>                  pop<br>           returnSelf<br>    or this:<br>              self<br>                  send: <literal 1=""><br>                  returnTop"<br>       | expectedHeaderPlusLliteralSize e byte |<br>     expectedHeaderPlusLliteralSize := Smalltalk wordSize * 4.<br>     ^(((e := aMethod endPC - expectedHeaderPlusLliteralSize) = 3 or: [e = 4]) <br>      and: [aMethod numLiterals = 3<br>+        and: [(aMethod at: expectedHeaderPlusLliteralSize + 1) = 16r4C "push self"<br>+         and: [(aMethod at: expectedHeaderPlusLliteralSize + 2) = 16r80 "send"<br>+      and: [(byte := aMethod at: expectedHeaderPlusLliteralSize + 3) = 16rD8 "pop" or: [byte = 16r5C "returnTop"]]]]])<br>-         and: [(aMethod at: expectedHeaderPlusLliteralSize + 1) = 16r4C        "push self"<br>-          and: [(aMethod at: expectedHeaderPlusLliteralSize + 2) = 16r80<br>-       and: [(byte := aMethod at: expectedHeaderPlusLliteralSize + 3) = 16rD8 or: [byte = 16r5C]]]]])        "pop or returnSelf"<br>                 ifTrue: [aMethod literalAt: 1]!<br><br>Item was changed:<br>  ----- Method: EncoderForV3 class>>markerOrNilFor: (in category 'compiled method support') -----<br>  markerOrNilFor: aMethod<br>      "If aMethod is a marker method, answer the symbol used to mark it.  Otherwise<br>     answer nil.  What is a marker method?  It is method with body like <br>                  'self subclassResponsibility' or '^ self subclassResponsibility' <br>      used to indicate ('mark') a special property.<br>  <br>    Marker methods compile to two bytecode forms, this:<br>           self<br>                  send: <literal 1=""><br>                  pop<br>           returnSelf<br>    or this:<br>              self<br>                  send: <literal 1=""><br>                  returnTop"<br>       | expectedHeaderPlusLliteralSize e byte |<br>     expectedHeaderPlusLliteralSize := Smalltalk wordSize * 4.<br>     ^(((e := aMethod endPC - expectedHeaderPlusLliteralSize) = 3 or: [e = 4]) <br>      and: [aMethod numLiterals = 3<br>+        and: [(aMethod at: expectedHeaderPlusLliteralSize + 1) = 16r70 "push self"<br>+         and: [(aMethod at: expectedHeaderPlusLliteralSize + 2) = 16rD0 "send"<br>+      and: [(byte := aMethod at: expectedHeaderPlusLliteralSize + 3) = 16r87 "pop" or: [byte = 16r7C "returnTop"]]]]])<br>-         and: [(aMethod at: expectedHeaderPlusLliteralSize + 1) = 16r70        "push self"<br>-          and: [(aMethod at: expectedHeaderPlusLliteralSize + 2) = 16rD0<br>-       and: [(byte := aMethod at: expectedHeaderPlusLliteralSize + 3) = 16r87 or: [byte = 16r78]]]]])        "pop or returnSelf"<br>                 ifTrue: [aMethod literalAt: 1]!<br><br><br></literal></literal></literal></literal></div></blockquote>
                                        </div></body>