MessageNode.st
changeset 1588 4c3183dfaa5f
parent 1587 6d710d71d592
child 1626 6addd73f7d47
--- a/MessageNode.st	Wed Apr 20 12:15:34 2005 +0200
+++ b/MessageNode.st	Wed Apr 20 16:41:54 2005 +0200
@@ -2823,91 +2823,39 @@
 
 !MessageNode methodsFor:'printing & storing'!
 
-printOn:aStream indent:i
-    |needParen selectorParts index index2 arg|
-
-    (#(whileTrue: whileFalse:) includes:selector) ifTrue:[
+printOn:aStream indent:i 
+    |selectorParts|
+
+    (#( whileTrue: whileFalse: ) includes:selector) ifTrue:[
         receiver isBlock ifTrue:[
             ^ self printWhileOn:aStream indent:i
         ].
     ].
-
-    index := 1.
-    selectorParts := OrderedCollection new.
-    [index == 0] whileFalse:[
-        index2 := selector indexOf:$: startingAt:index.
-        index2 ~~ 0 ifTrue:[
-            selectorParts add:(selector copyFrom:index to:index2).
-            index2 := index2 + 1
-        ].
-        index := index2
-    ].
-
-    needParen := false.
-    receiver isMessage ifTrue:[
-        receiver isUnaryMessage ifFalse:[
-            receiver isBinaryMessage ifFalse:[
-                needParen := true
-            ].
-        ].
-    ].
-    needParen ifTrue:[
-        aStream nextPutAll:'('
-    ].
-    receiver printOn:aStream indent:i.
-    needParen ifTrue:[
-        aStream nextPutAll:')'
-    ].
-
-    1 to:(argArray size) do:[:argIndex |
-        aStream cr.
-        aStream spaces:i+4.
-        (selectorParts at:argIndex) printOn:aStream.
-"/        aStream space.
-        arg := argArray at:argIndex.
-        needParen := false.
-        arg isMessage ifTrue:[
-            arg isBinaryMessage ifFalse:[
-                arg isUnaryMessage ifFalse:[
-                    needParen := true
-                ]
-            ].
-        ].
-        needParen ifTrue:[
-            aStream nextPutAll:'('
-        ].
-        arg printOn:aStream indent:i+4.
-        needParen ifTrue:[
-            aStream nextPutAll:') '
-        ].
-    ]
+    selectorParts := selector asCollectionOfSubstringsSeparatedBy:$:.
+    receiver printOn:aStream indent:i parenthized:(receiver precedence <= self precedence).
+    argArray with:selectorParts
+        do:[:arg :selPart | 
+            aStream
+                cr;
+                spaces:i + 4;
+                nextPutAll:(selPart , ':').
+            arg printOn:aStream indent:i + 4 parenthized:(arg precedence <= self precedence).
+        ]
+
+    "Modified: / 20-04-2005 / 14:29:16 / cg"
 !
 
 printWhileOn:aStream indent:i
-    |needParen arg|
-
     "special handling of whileTrue/whileFalse"
 
+    |arg|
+
     aStream nextPutAll:'['.
     receiver statements printOn:aStream indent:i.
-    aStream nextPutAll:'] whileTrue: '.
+    aStream nextPutAll:'] ',selector,' '.
 
     arg := argArray at:1.
-    needParen := false.
-    arg isMessage ifTrue:[
-	arg isBinaryMessage ifFalse:[
-	    arg isUnaryMessage ifFalse:[
-		needParen := true
-	    ]
-	].
-    ].
-    needParen ifTrue:[
-	aStream nextPutAll:'('
-    ].
-    arg printOn:aStream indent:i.
-    needParen ifTrue:[
-	aStream nextPutAll:') '
-    ].
+    arg printOn:aStream indent:i parenthized:(arg precedence <= self precedence).
 ! !
 
 !MessageNode methodsFor:'queries'!
@@ -2944,6 +2892,12 @@
     ^ argArray size
 !
 
+precedence
+    ^ 10
+
+    "Created: / 20-04-2005 / 14:10:59 / cg"
+!
+
 realReceiver
     receiver isCascade ifTrue:[
         ^ receiver realReceiver
@@ -2960,5 +2914,5 @@
 !MessageNode class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libcomp/MessageNode.st,v 1.143 2005-04-20 10:15:34 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libcomp/MessageNode.st,v 1.144 2005-04-20 14:40:39 cg Exp $'
 ! !