<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from text --><style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
</head>
<body>
<meta content="text/html; charset=UTF-8">
<style type="text/css" style="">
<!--
p
        {margin-top:0;
        margin-bottom:0}
-->
</style>
<div dir="ltr">
<div id="x_divtagdefaultwrapper" dir="ltr" style="font-size:12pt; color:#000000; font-family:Calibri,Helvetica,sans-serif">
<p>Thank you for the feedback, Jakob! I always try to be as specific as possible in the version message, but this one was
<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">
apparently </span>not precise enough ...</p>
<p><br>
</p>
<p>> <span style="font-size:12pt">what is their </span><span style="font-size:12pt">reason or purpose?</span></p>
<p><span style="font-size:12pt"><br>
</span></p>
<p><span style="font-size:12pt">I have been wondering a couple of times when exactly the failBlock passed to a compilation process is evaluated, or rather whether it might be evaluated at all. After analyzing the parser code, I found out that failBlock is evaluated *almost never*
 provided that the compilation is not interactive, i.e. whenever the specified requestor is nil. I have documented this insight in all relevant public method comments.</span></p>
<p><br>
</p>
<p>> <span>What was that single precedent case?</span></p>
<p><span><br>
</span></p>
<p><span><span><span>There was one exception to this (until now) undocumented rule: Parser >> #notify:at: sent an unconditional #fail "for </span>failure setting up syntax error" which appears to be an internal and thus very rare error only. I have added an
 interactive check at the relevant place to make sure that the following invariant now is always valid:</span><br>
</span></p>
<p><span><span><br>
</span></span></p>
<p><span><span>If the requestor is nil, failBlock will not be evaluated under any circumstances.</span></span></p>
<p><span><span><br>
</span></span></p>
<p>This invariant should help us to simplify several users of the compiler API (in the Trunk as well as in external packages) to reduce the number of code branches that need to be honored. For one example of many, in ClosureCompilerTest >> #<span><span>testDecompiledDoitMethodTempNames,
 we now know that we don't have to care about the failBlock so the [<span>self error: 'compilation error'] there is officially redundant. And yes, in the future we also might want to introduce a simple #<span>compile:in: convenience method for this purpose.
 :-)</span></span></span></span></p>
<p><span><span><span><span><br>
</span></span></span></span></p>
<p><span><span><span><span>I hope I could answer your questions ... :-)</span></span></span></span></p>
<p><span><span><span><span><br>
</span></span></span></span></p>
<p><span><span><span><span>Best,</span></span></span></span></p>
<p><span><span><span><span>Christoph</span></span></span></span></p>
<div id="x_Signature">
<div id="x_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="x_divtagdefaultwrapper" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:; margin:0">
<div><font size="2" color="#808080"></font></div>
</div>
</div>
</div>
</div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<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 Jakob Reschke <forums.jakob@resfarm.de><br>
<b>Gesendet:</b> Samstag, 14. November 2020 16:58:59<br>
<b>An:</b> squeak-dev@lists.squeakfoundation.org<br>
<b>Betreff:</b> Re: [squeak-dev] The Inbox: Compiler-ct.452.mcz</font>
<div> </div>
</div>
</div>
<font size="2"><span style="font-size:10pt;">
<div class="PlainText">> Reworks public Compiler interface and documentation:<br>
><br>
> - Parser: Do not use #fail in the event of an internal error unless compilation is interactive. This was a single precedent case.<br>
> ...<br>
> - Provide new convenience selectors #compileNoPattern: and #compileNoPattern:in: on Compiler instance side.<br>
<br>
Independent of whether these changes are good or bad: what is their<br>
reason or purpose? What was that single precedent case? I like to read<br>
such things in the commit message. :-)<br>
<br>
</div>
</span></font>
</body>
</html>