Variable references, readers, writers

AK
Aik-Siong Koh
Fri, Jun 27, 2025 8:27 PM

A variable can have references.
Those references can be split into readers and writers of the variable.
Can Pharo list readers and writers separately?
Thanks,
Aik-Siong Koh

A variable can have references. Those references can be split into readers and writers of the variable. Can Pharo list readers and writers separately? Thanks, Aik-Siong Koh
SC
steven.costiou@kloum.io
Fri, Jun 27, 2025 10:38 PM

Yes, to a variable (so including slots and all) you can ask readNodes
and assignmentNodes (accessingNodes gives both).
It gives nodes from the AST, but from there you can obtain the methods
and everything.

Le 27.06.2025 22:27, Aik-Siong Koh a écrit :

A variable can have references.
Those references can be split into readers and writers of the variable.
Can Pharo list readers and writers separately?
Thanks,
Aik-Siong Koh

Yes, to a variable (so including slots and all) you can ask readNodes and assignmentNodes (accessingNodes gives both). It gives nodes from the AST, but from there you can obtain the methods and everything. Le 27.06.2025 22:27, Aik-Siong Koh a écrit : > A variable can have references. > Those references can be split into readers and writers of the variable. > Can Pharo list readers and writers separately? > Thanks, > Aik-Siong Koh
MD
Marcus Denker
Sat, Jun 28, 2025 10:14 AM

This is the code that uses assignmentNodes:

((Point slotNamed: #x) assignmentNodes collect: [ :each | each methodNode compiledMethod ] ) asSet

But as a downside, it has to create the AST.

So maybe better is to use the API of the Variable:

Point methods select: [ :each | (Point slotNamed: #x) isWrittenIn: each ]

This is implemented to scan on the bytecode level for InstanceVariableSlot and thus is much faster:

InstanceVariableSlot>>#isWrittenIn:
	^aCompiledCode writesField: index

On 28 Jun 2025, at 00:38, steven.costiou@kloum.io wrote:

Yes, to a variable (so including slots and all) you can ask readNodes and assignmentNodes (accessingNodes gives both).
It gives nodes from the AST, but from there you can obtain the methods and everything.

Le 27.06.2025 22:27, Aik-Siong Koh a écrit :

A variable can have references.
Those references can be split into readers and writers of the variable.
Can Pharo list readers and writers separately?
Thanks,
Aik-Siong Koh

This is the code that uses assignmentNodes: ((Point slotNamed: #x) assignmentNodes collect: [ :each | each methodNode compiledMethod ] ) asSet But as a downside, it has to create the AST. So maybe better is to use the API of the Variable: Point methods select: [ :each | (Point slotNamed: #x) isWrittenIn: each ] This is implemented to scan on the bytecode level for InstanceVariableSlot and thus is much faster: InstanceVariableSlot>>#isWrittenIn: ^aCompiledCode writesField: index > On 28 Jun 2025, at 00:38, steven.costiou@kloum.io wrote: > > Yes, to a variable (so including slots and all) you can ask readNodes and assignmentNodes (accessingNodes gives both). > It gives nodes from the AST, but from there you can obtain the methods and everything. > > Le 27.06.2025 22:27, Aik-Siong Koh a écrit : >> A variable can have references. >> Those references can be split into readers and writers of the variable. >> Can Pharo list readers and writers separately? >> Thanks, >> Aik-Siong Koh