#BUGFIX by cg
class: CascadeNode
added: #printMessagePartOn:indent:
changed: #printOn:indent:
avoid recursion error also when printing
--- a/CascadeNode.st Tue Aug 08 18:22:43 2017 +0200
+++ b/CascadeNode.st Tue Aug 08 18:49:01 2017 +0200
@@ -257,14 +257,12 @@
!CascadeNode methodsFor:'printing & storing'!
-printOn:aStream indent:i
+printMessagePartOn:aStream indent:i
|selectorParts|
selectorParts := selector asCollectionOfSubstringsSeparatedBy:$:.
selectorParts last isEmpty ifTrue:[selectorParts := selectorParts copyButLast:1].
- receiver printOn:aStream indent:i.
- aStream nextPutAll:'; '.
argArray size == 0 ifTrue:[
selector printOn:aStream
] ifFalse:[
@@ -275,11 +273,44 @@
space;
nextPutAll:selPart;
nextPutAll:': '.
- arg printOn:aStream indent:i + 4 parenthized:(arg precedence <= self precedence).
+ arg
+ printOn:aStream
+ indent:i + 4
+ parenthized:(arg precedence <= self precedence).
]
]
- "Modified: / 12-09-2011 / 09:46:45 / cg"
+ "Created: / 08-08-2017 / 18:24:11 / cg"
+!
+
+printOn:aStream indent:i
+ |leftMostExpression sequence|
+
+ "/ new code:
+
+ leftMostExpression := receiver.
+ sequence := OrderedCollection new.
+ [leftMostExpression isCascade] whileTrue:[
+ sequence addFirst:leftMostExpression.
+ leftMostExpression := leftMostExpression receiver.
+ ].
+
+ leftMostExpression printOn:aStream indent:i.
+ aStream nextPutAll:'; '.
+
+ sequence do:[:eachCascadeMessage |
+ eachCascadeMessage printMessagePartOn:aStream indent:i.
+ aStream nextPutAll:'; '.
+ ].
+ self printMessagePartOn:aStream indent:i
+
+ "/ old code:
+
+ "/ receiver printOn:aStream indent:i.
+ "/ aStream nextPutAll:'; '.
+ "/ self printMessagePartOn:aStream indent:i
+
+ "Modified: / 08-08-2017 / 18:27:21 / cg"
! !
!CascadeNode methodsFor:'testing'!