<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Helvetica,sans-serif;" dir="ltr">
<div id="divtagdefaultwrapper" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<p>Please note that the #on:when:do: proposal would be only one possible implementation. Another idea of mine was to expand ExceptionSets and implement the common exception protocol also on BlockClosure! Watch some rewritten examples based on a true image:</p>
<p><br>
</p>
</div>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;">
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<p></p>
<div>[self model merge]</div>
<p></p>
</div>
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<p></p>
<div><span style="white-space:pre"></span>on: MCMergeResolutionRequest <span style="font-size: 12pt;">& [:request |</span></div>
<div><span style="font-size: 12pt;"><span style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px; white-space: pre;"></span><span style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px; white-space: pre;"></span>request
 merger conflicts notEmpty]</span></div>
<p></p>
</div>
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<p></p>
<div><span style="white-space:pre"></span>do: [:request | request resume: true].</div>
<p></p>
</div>
</blockquote>
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<p></p>
<div></div>
<div><br>
</div>
<p></p>
</div>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;">
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<p></p>
<div>[client unusedBytecode]</div>
<p></p>
</div>
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<p></p>
<div><span style="white-space:pre"></span>on: MessageNotUnderstood</div>
<p></p>
</div>
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<p></p>
<div><span style="white-space:pre"></span>& [:ex | ex receiver == client]</div>
<p></p>
</div>
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<p></p>
<div><span style="white-space:pre"></span>& [:ex | ex message selector == #unusedBytecode]</div>
<p></p>
</div>
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<p></p>
<div><span style="white-space:pre"></span>do: [self error: 'unusedBytecode'].</div>
<p></p>
</div>
</blockquote>
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<p></p>
<div></div>
<div><br>
</div>
<p></p>
</div>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;">
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<p></p>
<div></div>
<div>references := [self resolvePackageSpecReferences: packageSpec gofer: gofer]</div>
<div><span style="white-space:pre"></span>on: [self class retryPackageResolution] & (Error , GoferRepositoryError)</div>
<div><span style="white-space:pre"></span>do: [:ex | <span style="font-size: 12pt;">retryCount < 2 ifTrue: [</span></div>
<div><span style="white-space:pre"></span>ex return: #()]</div>
<div><span style="white-space:pre"></span>on: [self class retryPackageResolution] & GoferRepositoryError.</div>
<div><span style="white-space:pre"></span>Transcript showln: 'gofer repository error: '; show: ex description printString; show: '...ignoring'.</div>
<div><span style="white-space:pre"></span>(repositoryError := ex) resume: #()].</div>
<p></p>
</div>
</blockquote>
<span style="font-size: 10pt;">(original version of the latter was</span><span style="font-size: 10pt;">:</span>
<div>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;">
<div></div>
<div><span style="font-size: 10pt;">references := [ self resolvePackageSpecReferences: packageSpec gofer: gofer ]</span></div>
<div><span style="font-size: 10pt;">    on: Error , GoferRepositoryError</span></div>
<div><span style="font-size: 10pt;">    do: [ :ex | </span></div>
<div><span style="font-size: 10pt;">        self class retryPackageResolution</span></div>
<div><span style="font-size: 10pt;">            ifFalse: [ ex pass ].</span></div>
<div><span style="font-size: 10pt;">        retryCount >= 2</span></div>
<div><span style="font-size: 10pt;">            ifTrue: [ </span></div>
<div><span style="font-size: 10pt;">                (ex isKindOf: GoferRepositoryError)</span></div>
<div><span style="font-size: 10pt;">                    ifTrue: [ </span></div>
<div><span style="font-size: 10pt;">                        </span><span style="font-size: 10pt;">Transcript </span><span style="font-size: 10pt;">showln: 'gofer repository error: ' , ex description printString , '...ignoring'.</span></div>
<div><span style="font-size: 10pt;">                        repositoryError := ex.</span></div>
<div><span style="font-size: 10pt;">                        ex resume: #() ]</span></div>
<div><span style="font-size: 10pt;">                    ifFalse: [ ex pass ] ].</span></div>
<div><span style="font-size: 10pt;">        ex return: #() ].</span></div>
<div></div>
</blockquote>
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<p></p>
<div><span style="font-size: 10pt;">)</span></div>
<div><br>
</div>
<div>Another advantage against #on:when:do: would be integrated support for SUnit:</div>
<div><br>
</div>
<p></p>
</div>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;">
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<p></p>
<div>sz := 1024*1024*1024*1024.</div>
<p></p>
</div>
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<p></p>
<div>self</div>
<p></p>
</div>
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<p></p>
<div><span style="white-space:pre"></span>should: [Array new: sz]</div>
<p></p>
</div>
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<p></p>
<div><span style="white-space:pre"></span>raise: OutOfMemory, (Error & [:ex | ex messageText</div>
<div><span style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px; white-space: pre;"></span><span style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px; white-space: pre;"></span>includesSubstring:
 'basicNew: with invalid argument'])</div>
<p></p>
</div>
</blockquote>
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<p></p>
<div></div>
<div><br>
</div>
I am excited to hear your opinions about both proposals!<br>
<p></p>
<div id="Signature">
<div id="divtagdefaultwrapper" dir="ltr" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;">
<div name="divtagdefaultwrapper" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:; margin:0">
<div>
<div class="_rp_T4" id="Item.MessagePartBody">
<div class="_rp_U4 ms-font-weight-regular ms-font-color-neutralDark rpHighlightAllClass rpHighlightBodyClass" id="Item.MessageUniqueBody" style="font-family:wf_segoe-ui_normal,"Segoe UI","Segoe WP",Tahoma,Arial,sans-serif,serif,EmojiFont">
<div dir="ltr">
<div id="divtagdefaultwrapper"><font face="Calibri,Helvetica,sans-serif,EmojiFont,Apple Color Emoji,Segoe UI Emoji,NotoColorEmoji,Segoe UI Symbol,Android Emoji,EmojiSymbols">
<div id="Signature">
<div style="margin:0px"><font style="font-family:Calibri,Arial,Helvetica,sans-serif,serif,EmojiFont"></font></div>
</div>
</font></div>
</div>
</div>
</div>
</div>
<div><font size="2" color="#808080"></font></div>
</div>
</div>
</div>
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<br>
</div>
Best,</div>
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
Christoph<br>
<br>
<div style="color: rgb(0, 0, 0);">
<div>
<hr style="display:inline-block; width:98%" tabindex="-1">
<div id="x_divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>Von:</b> Squeak-dev <squeak-dev-bounces@lists.squeakfoundation.org> im Auftrag von commits@source.squeak.org <commits@source.squeak.org><br>
<b>Gesendet:</b> Freitag, 3. Januar 2020 02:21 Uhr<br>
<b>An:</b> squeak-dev@lists.squeakfoundation.org<br>
<b>Betreff:</b> [squeak-dev] The Inbox: Kernel-ct.1292.mcz</font>
<div> </div>
</div>
</div>
<font size="2"><span style="font-size:10pt;">
<div class="PlainText">A new version of Kernel was added to project The Inbox:<br>
<a href="http://source.squeak.org/inbox/Kernel-ct.1292.mcz" id="LPlnk538406" previewremoved="true">http://source.squeak.org/inbox/Kernel-ct.1292.mcz</a><br>
<br>
==================== Summary ====================<br>
<br>
Name: Kernel-ct.1292<br>
Author: ct<br>
Time: 3 January 2020, 2:21:26.297116 am<br>
UUID: 95936a10-85a4-734e-a10b-0f87290b70f9<br>
Ancestors: Kernel-nice.1291<br>
<br>
Proposal: Implement conditional exception handling on blocks. The nomenclature is inspired from usual practice in .NET languages.<br>
<br>
For an impression of possible users, have a look at:<br>
<br>
        self systemNavigation<br>
                browseMessageList: ((self systemNavigation allCallsOn: #on:do: and: #pass) intersection: (#(ifTrue: ifFalse: ifTrue:ifFalse: ifFalse:ifTrue:) gather: [:sel | self systemNavigation allCallsOn: sel]))<br>
                name: 'Potential users of #on:when:do:'<br>
<br>
=============== Diff against Kernel-nice.1291 ===============<br>
<br>
Item was added:<br>
+ ----- Method: BlockClosure>>on:when:do: (in category 'exceptions') -----<br>
+ on: exceptionOrExceptionSet when: aPredicate do: handlerAction<br>
+ <br>
+        ^ self<br>
+                on: exceptionOrExceptionSet<br>
+                do: [:exception |<br>
+                        (aPredicate value: exception)<br>
+                                ifTrue: [handlerAction cull: exception]<br>
+                                ifFalse: [exception pass]]!<br>
<br>
Item was added:<br>
+ ----- Method: BlockClosure>>on:when:ensure: (in category 'exceptions') -----<br>
+ on: exceptionOrExceptionSet when: aPredicate ensure: aBlock<br>
+ <br>
+        ^ self<br>
+                on: exceptionOrExceptionSet<br>
+                do: [:exception |<br>
+                        (aPredicate value: exception)<br>
+                                ifTrue: [aBlock value].<br>
+                        exception pass]!<br>
<br>
<br>
</div>
</span></font></div>
</div>
</div>
</div>
</body>
</html>