<body><div id="__MailbirdStyleContent" style="font-size: 10pt;font-family: Arial;color: #000000;text-align: left" dir="ltr">
                                        Note that there is #atLast: :-)<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 16.11.2021 12:41:10 schrieb commits@source.squeak.org <commits@source.squeak.org>:</p><div style='font-family:Arial,Helvetica,sans-serif'>A new version of Compiler was added to project The Inbox:<br>http://source.squeak.org/inbox/Compiler-ct.463.mcz<br><br>==================== Summary ====================<br><br>Name: Compiler-ct.463<br>Author: ct<br>Time: 16 November 2021, 12:40:59.711376 pm<br>UUID: 8f758ee8-125c-d54d-b581-72ab467f92ae<br>Ancestors: Compiler-eem.460<br><br>Fixes a DNU in the decompiler when the stack contains flags (such as CaseFlag) while trying to match a #to:[by:]do: loop. Can be reproduced with String >> #format: ct 12/7/2019 15:05 (Collections-ct.867).<br><br>=============== Diff against Compiler-eem.460 ===============<br><br>Item was changed:<br>  ----- Method: Decompiler>>startAndLimitFor:from:into: (in category 'private') -----<br>  startAndLimitFor: incrVar from: aStack into: binaryBlock<br>   "If incrVar matches the increment of a whileLoop at the end of statements<br>         evaluate binaryBlock with the init statement for incrVar and the init statement<br>       for the block's limit, if any, and answer true.  Otherwise answer false.  Used to<br>     help convert whileTrue: loops into to:[by:]do: loops."<br>          | guard initExpr limitInit size |<br>     ((size := aStack size) >= 1<br>+        and: [(initExpr := aStack at: size) isKindOf: ParseNode]<br>+     and: [initExpr isAssignmentNode]) ifFalse:<br>-   and: [(initExpr := aStack at: size) isAssignmentNode]) ifFalse:<br>              [^false].<br>     initExpr variable == incrVar ifTrue:<br>                  [binaryBlock value: initExpr value: nil.<br>               ^true].<br>      limitInit := initExpr.<br>        (size >= 2<br>+         and: [((initExpr := aStack at: size - 1) isKindOf: ParseNode)<br>+        and: [initExpr isAssignmentNode<br>+      and: [initExpr variable == incrVar]<br>-          and: [(initExpr := aStack at: size - 1) isAssignmentNode<br>-     and: [initExpr variable == incrVar<br>    and: [(guard := statements last receiver) isBlockNode<br>         and: [guard statements size = 1<br>       and: [(guard := guard statements first) isMessageNode<br>         and: [guard receiver == incrVar<br>       and: [guard arguments first == limitInit variable]]]]]]]) ifTrue:<br>            [binaryBlock value: initExpr value: limitInit.<br>                 ^true].<br>      ^false!<br><br><br></div></blockquote>
                                        </div></body>