Maybe I will find some time to hack the tree-matching rules to highlight the matched piece of code. It’s so frustrating that they don’t do it…
Uko
On 30 Jun 2016, at 10:17, Marcus Denker marcus.denker@inria.fr wrote:
finalizationProcess "The finalization process arranges to send mourn to each element of the VM's finalization queue, which is accessed via primitiveFetchMourner. The VM signals FinalizationSemaphore whenever the queue is non-empty. This process loops, waiting on the semaphore, fetches the first element of the queue and then spawns a process at a higher priority to acually send the mourn messages. If an error occurs in the higher priority mourn loop process then this process will simply spawn another process, hence ensuring that errors in finalization methods don't break finalization.
In addition this process also runs the old finalization scheme, supporting clients of the older, WeakRegistry based scheme. Hopefully this will go away when all cleints have moved over." | throttle firstMourner | throttle := Semaphore new. [FinalizationSemaphore wait; initSignals. "Support the old scheme until things have changed over..." self doOldFinalization. [firstMourner := self primitiveFetchMourner. firstMourner notNil] whileTrue: [[throttle signal. self mournLoopWith: firstMourner] forkAt: Processor activePriority + 1. throttle wait]]
Doh! So I wrote a naked block, not a loop !! So it did nothing. Thank you!! I think the compiler should warn about naked blocks.
I added a new Code-Critic rule "RBDeadBlockRule", with
initialize super initialize. self matcher matches: '`{:node | node isBlock and: [node parent isSequence and: [ node isLastStatementInBlock not ]]}' do: [ :node :answer | node ]
This now shows a warning in the tools (the explanation is shown when clicking on the ? button): It does not yet highlight the block and has no automatic transformation to fix the problem, but as a first step it should be nice to have.
<Dead.jpg>
This is in 60 update 126.
(I did not read the mail again before doing it, so now it is called "dead", not "naked", we can change that... dead somehow makes it look to be related a "dead context"...).
Marcus
vm-dev@lists.squeakfoundation.org