AST visualization with Roassal
Hi, everyone! First of all, using Roassal is fun and effective :) But while working on AST visualization I found that sometimes Roassal builds wrong tree layout (or maybe I'm just doing something wrong). For instance, try two following scripts in playground: ************************* #1 | ast builder | ast := RBParser parseExpression: 'self foo. self foo'. builder := RTMondrian new. builder shape ellipse size: 15. builder nodes: ast allChildren. builder edges connectFrom: #parent. builder layout tree. builder build. builder view ************************* ************************* #2 | ast builder | ast := RBParser parseExpression: 'self foo. super foo'. builder := RTMondrian new. builder shape ellipse size: 15. builder nodes: ast allChildren. builder edges connectFrom: #parent. builder layout tree. builder build. builder view ************************* First script builds wrong tree. I think it's because somewhere in roassal objects (in this case ast nodes) are compared by value. That is why when we have two equal receivers in script #1 it fails to build a tree. Thanks, Mark -- View this message in context: http://forum.world.st/AST-visualization-with-Roassal-tp4840243.html Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.
I think it's because somewhere in roassal objects (in this case ast nodes) are compared by value.
Pretty much; there is test for equality RTGroup>>elementFromModel: anObject ^ self detect: [ :el | el model = anObject ] ifNone: [ nil ] and equality is more often than not wanted. So solution might be to tell Mondrian that you want to compare by identity and not equality? Peter
Pretty much; there is test for equality
RTGroup>>elementFromModel: anObject ^ self detect: [ :el | el model = anObject ] ifNone: [ nil ]
and equality is more often than not wanted.
So solution might be to tell Mondrian that you want to compare by identity and not equality?
Exactly! I'd like to have an option to select how I want to compare objects.
On 30 Jul 2015, at 16:47, Mark Rizun <mrizun@gmail.com> wrote:
Pretty much; there is test for equality
RTGroup>>elementFromModel: anObject ^ self detect: [ :el | el model = anObject ] ifNone: [ nil ]
and equality is more often than not wanted.
So solution might be to tell Mondrian that you want to compare by identity and not equality?
Exactly! I'd like to have an option to select how I want to compare objects.
It uses already a block to do the comparision⦠if you make that pluggable (add ivar, set it to [ :el | el model = anObject ] in #initialize, add accessor) then you can just provide your own block with #== instead. Marcus
Hi Mark, I have introduced a class RTIdentityGroup. You can do: -=-=-= -=-=-= -=-=-= -=-=-= ast := RBParser parseExpression: 'self foo. self foo'. builder := RTMondrian new. builder shape ellipse size: 15. nodes := builder nodes: ast allChildren. builder edges elements: nodes asIdentityGroup; connectFrom: #parent. builder layout tree. builder -=-=-= -=-=-= -=-=-= -=-=-= You obtain this: Maybe Marcus will have the same problem. Cheers, Alexandre -- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
On Jul 30, 2015, at 11:47 AM, Mark Rizun <mrizun@gmail.com> wrote:
Pretty much; there is test for equality
RTGroup>>elementFromModel: anObject ^ self detect: [ :el | el model = anObject ] ifNone: [ nil ]
and equality is more often than not wanted.
So solution might be to tell Mondrian that you want to compare by identity and not equality?
Exactly! I'd like to have an option to select how I want to compare objects.
On 30 Jul 2015, at 17:26, Alexandre Bergel <alexandre.bergel@me.com> wrote:
Hi Mark,
I have introduced a class RTIdentityGroup.
You can do:
-=-=-= -=-=-= -=-=-= -=-=-= ast := RBParser parseExpression: 'self foo. self foo'. builder := RTMondrian new. builder shape ellipse size: 15. nodes := builder nodes: ast allChildren. builder edges elements: nodes asIdentityGroup; connectFrom: #parent. builder layout tree. builder -=-=-= -=-=-= -=-=-= -=-=-=
You obtain this: <Screen Shot 2015-07-30 at 12.25.25 PM.png>
Maybe Marcus will have the same problem.
Yes, we checked. This explains the strange âtoo largeâ rectangle :-) Marcus
Great, everybody is happy ;) Thanks Alex ! 30 лип. 2015 5:40 пп "Marcus Denker" <marcus.denker@inria.fr> пиÑе:
On 30 Jul 2015, at 17:26, Alexandre Bergel <alexandre.bergel@me.com> wrote:
Hi Mark,
I have introduced a class RTIdentityGroup.
You can do:
-=-=-= -=-=-= -=-=-= -=-=-= ast := RBParser parseExpression: 'self foo. self foo'. builder := RTMondrian new. builder shape ellipse size: 15. nodes := builder nodes: ast allChildren. builder edges elements: nodes asIdentityGroup; connectFrom: #parent. builder layout tree. builder -=-=-= -=-=-= -=-=-= -=-=-=
You obtain this: <Screen Shot 2015-07-30 at 12.25.25 PM.png>
Maybe Marcus will have the same problem.
Yes, we checked. This explains the strange âtoo largeâ rectangle :-)
Marcus
Excellent! Alexandre -- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
On Jul 30, 2015, at 12:40 PM, Marcus Denker <marcus.denker@inria.fr> wrote:
Yes, we checked. This explains the strange âtoo largeâ rectangle :-)
Frankly, I often find weird to override #= Alexandre -- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
On Jul 30, 2015, at 11:41 AM, Peter Uhnák <i.uhnak@gmail.com> wrote:
I think it's because somewhere in roassal objects (in this case ast nodes) are compared by value.
Pretty much; there is test for equality
RTGroup>>elementFromModel: anObject ^ self detect: [ :el | el model = anObject ] ifNone: [ nil ]
and equality is more often than not wanted.
So solution might be to tell Mondrian that you want to compare by identity and not equality?
Peter
participants (4)
-
Alexandre Bergel -
Marcus Denker -
Mark Rizun -
Peter Uhnák