<body><div id="__MailbirdStyleContent" style="font-size: 10pt;font-family: Arial;color: #000000">
Hi Eliot,<div><br></div><div>how would you define selector, message, (message) send, and method? It seems like a "message" is a very high-level concept. Selectors and methods seem to be more on the implementation side and thus the right names to use for such reflection over compiled code.</div><div><br></div><div>Project >> #addDeferredUIMessage:</div><div>CompiledCode >> #abstractBytecodeMessageAt:</div><div>SystemNavigation >> #allSentMessages</div><div>...</div><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 11.12.2019 20:50:30 schrieb commits@source.squeak.org <commits@source.squeak.org>:</p><div style="font-family:Arial,Helvetica,sans-serif">A new version of Kernel was added to project The Inbox:<br>http://source.squeak.org/inbox/Kernel-eem.1285.mcz<br><br>==================== Summary ====================<br><br>Name: Kernel-eem.1285<br>Author: eem<br>Time: 11 December 2019, 11:50:19.928718 am<br>UUID: 3dce70bd-9166-47fe-a86f-22456db9845a<br>Ancestors: Kernel-mt.1284<br><br>Commit my own take on sendsSelector: vs sendsMessage:, and selectorsDo: vs messagesDo:. IMNERHO sendsMessage: messagesDo: are *wrong*!! :-) c.f. Behavior>>selectorsDo:<br><br>=============== Diff against Kernel-mt.1284 ===============<br><br>Item was changed:<br> ----- Method: CompiledCode>>messagesDo: (in category 'scanning') -----<br> messagesDo: workBlock<br>+ "Evaluate aBlock with all the message selectors sent by me. Duplicate seletors are possible."<br>- "Evaluate aBlock with all the message selectors sent by me. Duplicate sends possible."<br> <br>+ "If anything should be deprecated it is messagesDo:; it can be an extension in AST/Refactoring.<br>+ This method enumerates over selectors, not messages. c.f. Behavior>>selectorsDo: etc"<br>+ ^self selectorsDo: workBlock!<br>- | scanner selector |<br>- self isQuick ifTrue: [^ self].<br>- <br>- self codeLiteralsDo: [:compiledCode | <br>- scanner := InstructionStream on: compiledCode.<br>- scanner scanFor: [ :x | <br>- (selector := scanner selectorToSendOrSelf) == scanner<br>- ifFalse: [workBlock value: selector].<br>- false "keep scanning" ] ].!<br><br>Item was added:<br>+ ----- Method: CompiledCode>>selectorsDo: (in category 'scanning') -----<br>+ selectorsDo: workBlock<br>+ "Evaluate aBlock with all the message selectors sent by me. Duplicate seletors are possible."<br>+ <br>+ self isQuick ifTrue: [^self].<br>+ <br>+ self codeLiteralsDo:<br>+ [:compiledCode | | scanner |<br>+ (scanner := InstructionStream on: compiledCode) scanFor:<br>+ [:x| | selector |<br>+ (selector := scanner selectorToSendOrSelf) ~~ scanner ifTrue:<br>+ [workBlock value: selector].<br>+ false "keep scanning"]]!<br><br>Item was changed:<br> ----- Method: CompiledCode>>sendsMessage: (in category 'testing') -----<br>+ sendsMessage: aSelector<br>+ "eem: this should be deprecated. This method does not check if a method sends a message;<br>+ it checks if a method sends a message with a particular selector."<br>+ self flag: #todo.<br>- sendsMessage: aSelector <br>- <br> self messagesDo: [:selector |<br> selector = aSelector ifTrue: [^ true]].<br> ^ false!<br><br>Item was changed:<br> ----- Method: CompiledCode>>sendsSelector: (in category 'testing') -----<br> sendsSelector: aSelector <br>+ "Answer if the receiver sends a message whose selector is aSelector."<br> <br>+ self selectorsDo:<br>+ [:selector | selector = aSelector ifTrue: [^true]].<br>+ ^false!<br>- self flag: #todo. "mt: Deprecate? AST/Refactoring project needs it..."<br>- ^ self sendsMessage: aSelector!<br><br><br></div></blockquote>
</div></body>