<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>