<body><div id="__MailbirdStyleContent" style="font-size: 10pt;font-family: Arial;color: #000000;text-align: left" dir="ltr">
                                        > <span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px">a massive rewrite of (Symbol hasInterned: aString ifTrue: [:aSymbol |</span><br style="font-family: Arial, Helvetica, sans-serif;font-size: 13px"><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px">...]) into ((Symbol lookup: aString) ifNotNil: [:aSymbol | ...]) is</span><br style="font-family: Arial, Helvetica, sans-serif;font-size: 13px"><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px">possible</span><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px"><br></span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px">Hmm... only 34 senders. Would me take about 2 hours max, I suppose. I volunteer. Should I do it?</span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px"><br></span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px">Best,</span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px">Marcel</span></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 13.04.2021 12:01:05 schrieb Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com>:</p><div style='font-family:Arial,Helvetica,sans-serif'>I think that findInterned: is old, probably from st80 epoch...<br>hasInterned:ifTrue: also, it may be cross-dialect. Strange that we did<br>put it in private...<br>a massive rewrite of (Symbol hasInterned: aString ifTrue: [:aSymbol |<br>...]) into ((Symbol lookup: aString) ifNotNil: [:aSymbol | ...]) is<br>possible, except in the rare cases when we use the returned value of<br>the send, which is a Boolean.<br>But it is questionable...<br><br>Le mar. 13 avr. 2021 à 11:53, Marcel Taeumel <marcel.taeumel@hpi.de> a écrit :<br>><br>> Hey Eliot,<br>><br>> recently, you chose #findInterned: over #lookup:. Can you recall how this happened? What is your opinion on this matter? :-)<br>><br>> Here is a remark from Levente about this from July 2019:<br>> http://forum.world.st/The-Trunk-Morphic-mt-1491-mcz-tp5101075p5101089.html<br>><br>> Best,<br>> Marcel<br>><br>> Am 13.04.2021 11:44:24 schrieb Marcel Taeumel <marcel.taeumel@hpi.de>:<br>><br>> > May I suggest to classify them as private then?<br>><br>> Hmm... #hasInterned:ifTrue: is "private" already. ;-) Maybe #findInterned: should be, too. Yet, soft-deprecation via "self flag: #deprecated" might be even better since both are actually implemented through #lookup:.<br>><br>> Best,<br>> Marcel<br>><br>> Am 13.04.2021 11:25:27 schrieb Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com>:<br>><br>> Le mar. 13 avr. 2021 à 10:51, a écrit :<br>> ><br>> > Marcel Taeumel uploaded a new version of Tests to project The Trunk:<br>> > http://source.squeak.org/trunk/Tests-mt.449.mcz<br>> ><br>> > ==================== Summary ====================<br>> ><br>> > Name: Tests-mt.449<br>> > Author: mt<br>> > Time: 13 April 2021, 10:51:15.223811 am<br>> > UUID: 23984a3a-fc1c-2a44-a023-9862b3d2ba8d<br>> > Ancestors: Tests-nice.448<br>> ><br>> > Simplify #testUnknownSelector. Avoid interfering with garbage collection and symbol tables.<br>> ><br>> > (Note that #lookup: is the preferred interface, not #findInterned: or #hasInterned:ifTrue:. The concept of internalization should not leak into client code.)<br>><br>> May I suggest to classify them as private then?<br>><br>> ><br>> > =============== Diff against Tests-nice.448 ===============<br>> ><br>> > Item was changed:<br>> > TestCase subclass: #CompilerExceptionsTest<br>> > + instanceVariableNames: 'text selectionInterval originalText previousSelection originalSelection'<br>> > - instanceVariableNames: 'text selectionInterval originalText previousSelection originalSelection tearDowns'<br>> > classVariableNames: ''<br>> > poolDictionaries: ''<br>> > category: 'Tests-Compiler'!<br>> ><br>> > Item was added:<br>> > + ----- Method: CompilerExceptionsTest>>generateUnknownSelector (in category 'private') -----<br>> > + generateUnknownSelector<br>> > +<br>> > + | selector num |<br>> > + selector := 'yourself'.<br>> > + num := 0.<br>> > + [(Symbol lookup: selector, num) notNil] whileTrue: [num := num + 1].<br>> > + ^ selector, num!<br>> ><br>> > Item was removed:<br>> > - ----- Method: CompilerExceptionsTest>>setUp (in category 'running') -----<br>> > - setUp<br>> > -<br>> > - super setUp.<br>> > - tearDowns := OrderedCollection new.<br>> > - Symbol hasInterned: self unknownSelector ifTrue: [:symbol |<br>> > - tearDowns add: [Symbol intern: symbol]].<br>> > - Symbol extern: self unknownSelector.!<br>> ><br>> > Item was changed:<br>> > ----- Method: CompilerExceptionsTest>>tearDown (in category 'running') -----<br>> > tearDown<br>> ><br>> > self removeGeneratedMethods.<br>> > - Symbol extern: self unknownSelector.<br>> > - tearDowns do: #value.<br>> > super tearDown.!<br>> ><br>> > Item was changed:<br>> > ----- Method: CompilerExceptionsTest>>testUnknownSelector (in category 'tests') -----<br>> > testUnknownSelector<br>> ><br>> > + | unknownSelector |<br>> > + self flag: #flaky. "mt: This test depends on a list of suggestions that is derived from the system's known selectors. Any desired replacement might not be present in the actual list. Maybe we could use an index-based choice instead."<br>> > + unknownSelector := self generateUnknownSelector.<br>> > self<br>> > + compiling: 'griffle self ' , unknownSelector<br>> > - compiling: 'griffle self ' , self unknownSelector<br>> > shouldRaise: UnknownSelector<br>> > + andSelect: unknownSelector<br>> > - andSelect: self unknownSelector<br>> > testing: {<br>> > + false -> [<br>> > + self assertCanceled.<br>> > + self assert: (Symbol lookup: unknownSelector) isNil].<br>> > + 'yourself' -> [<br>> > + self assertSucceeded: 'griffle self yourself'.<br>> > + self assert: (Symbol lookup: unknownSelector) isNil].<br>> > + unknownSelector -> [<br>> > - false -> [self assertCanceled].<br>> > - 'yourself' -> [self assertSucceeded: 'griffle self yourself'].<br>> > - self unknownSelector -> [<br>> > self assertSucceeded.<br>> > + self assert: (Symbol lookup: unknownSelector) notNil] }.<br>> > + unknownSelector := self generateUnknownSelector.<br>> > - self assert: (Symbol hasInterned: self unknownSelector ifTrue: [:symbol |]).<br>> > - Symbol extern: self unknownSelector] }.<br>> > self<br>> > + compiling: 'griffle [ self ' , unknownSelector , ' ] value'<br>> > - compiling: 'griffle [ self ' , self unknownSelector , ' ] value'<br>> > shouldRaise: UnknownSelector<br>> > + andSelect: unknownSelector<br>> > - andSelect: self unknownSelector<br>> > testing: {<br>> > + false -> [<br>> > + self assertCanceled.<br>> > + self assert: (Symbol lookup: unknownSelector) isNil].<br>> > + 'yourself' -> [<br>> > + self assertSucceeded: 'griffle [ self yourself ] value'.<br>> > + self assert: (Symbol lookup: unknownSelector) isNil].<br>> > + unknownSelector -> [<br>> > - false -> [self assertCanceled].<br>> > - 'yourself' -> [self assertSucceeded: 'griffle [ self yourself ] value'].<br>> > - self unknownSelector -> [<br>> > self assertSucceeded.<br>> > + self assert: (Symbol lookup: unknownSelector) notNil] }.!<br>> > - self assert: (Symbol hasInterned: self unknownSelector ifTrue: [:symbol |])] }.!<br>> ><br>> > Item was removed:<br>> > - ----- Method: CompilerExceptionsTest>>unknownSelector (in category 'private') -----<br>> > - unknownSelector<br>> > -<br>> > - ^ 'yourrsellff'!<br>> ><br>> > Item was removed:<br>> > - ----- Method: Symbol class>>extern: (in category '*Tests-release') -----<br>> > - extern: aStringOrSymbol<br>> > -<br>> > - {NewSymbols. SymbolTable} do: [:table |<br>> > - table remove: aStringOrSymbol ifAbsent: []].!<br>> ><br>> ><br>><br>><br><br></nicolas.cellier.aka.nice@gmail.com></marcel.taeumel@hpi.de></marcel.taeumel@hpi.de></div></blockquote>
                                        </div></body>