oops - care for block-num-args being correct when
authorClaus Gittinger <cg@exept.de>
Fri, 21 May 1999 17:39:03 +0200
changeset 851 4afe809029f6
parent 850 316a2bfa5e82
child 852 ec002c00033a
oops - care for block-num-args being correct when inlining #while, #timesRepeat etc.
MessageNd.st
MessageNode.st
--- a/MessageNd.st	Wed May 19 15:07:09 1999 +0200
+++ b/MessageNd.st	Fri May 21 17:39:03 1999 +0200
@@ -1060,21 +1060,19 @@
             ]
         ].
 
-        receiver isBlock ifTrue:[
+        (receiver isBlock 
+        and:[receiver numArgs == 0
+        and:[receiver isInlinable]]) ifTrue:[
             selector == #value ifTrue:[
                 receiver codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
                 ^ self
             ].
             ((selector == #whileTrue) or:[selector == #whileFalse]) ifTrue:[
-                receiver isInlinable ifTrue:[
-                    ^ self codeWhileOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
-                ]
+                ^ self codeWhileOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
             ].
             (selector == #repeat) ifTrue:[
-                receiver isInlinable ifTrue:[
-                    valueNeeded ifFalse:[
-                        ^ self codeRepeatOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
-                    ]
+                valueNeeded ifFalse:[
+                    ^ self codeRepeatOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
                 ]
             ].
         ].
@@ -1094,7 +1092,9 @@
              ].
         ].
 
-        (arg1 isBlock and:[arg1 isInlinable]) ifTrue:[
+        (arg1 isBlock 
+        and:[arg1 isInlinable
+        and:[arg1 numArgs == 0]]) ifTrue:[
             ((selector == #ifTrue:) or:[selector == #ifFalse:]) ifTrue:[
                 receiver isBlock ifFalse:[
                     ^ self codeIfOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
@@ -1117,7 +1117,9 @@
             ].
 
             ((selector == #whileTrue:) or:[selector == #whileFalse:]) ifTrue:[
-                (receiver isBlock and:[receiver isInlinable]) ifTrue:[
+                (receiver isBlock 
+                and:[receiver isInlinable
+                and:[receiver numArgs == 0]]) ifTrue:[
                     ^ self codeWhileOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
                 ]
             ]
@@ -1139,16 +1141,21 @@
     (nargs == 2) ifTrue:[
         ((selector == #ifTrue:ifFalse:) or:[selector == #ifFalse:ifTrue:]) ifTrue:[
             receiver isBlock ifFalse:[
-                (arg1 isBlock and:[arg1 isInlinable]) ifTrue:[
-                    (arg2 isBlock and:[arg2 isInlinable]) ifTrue:[
-                        ^ self codeIfElseOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
-                    ]
+                (arg1 isBlock 
+                and:[arg1 isInlinable
+                and:[arg1 numArgs == 0
+                and:[arg2 isBlock 
+                and:[arg2 isInlinable
+                and:[arg2 numArgs == 0]]]]]) ifTrue:[
+                    ^ self codeIfElseOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
                 ]
             ]
         ].
 
         selector == #to:do: ifTrue:[
-            (arg2 isBlock and:[arg2 isInlinable and:[arg2 numArgs == 1]]) ifTrue:[
+            (arg2 isBlock 
+            and:[arg2 isInlinable 
+            and:[arg2 numArgs == 1]]) ifTrue:[
                 ^ self codeToDoOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
             ]
         ].
@@ -1161,12 +1168,11 @@
         selector == #to:by:do: ifTrue:[
             "/ step must be a constant (need to know how to compare)
             (arg2 isConstant 
-            and:[arg2 type == #Integer]) ifTrue:[
-                (arg3 isBlock 
-                and:[arg3 isInlinable 
-                and:[arg3 numArgs == 1]]) ifTrue:[
-                    ^ self codeToByDoOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
-                ]
+            and:[arg2 type == #Integer
+            and:[arg3 isBlock 
+            and:[arg3 isInlinable 
+            and:[arg3 numArgs == 1]]]]) ifTrue:[
+                ^ self codeToByDoOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
             ]
         ].
     ].
@@ -2425,5 +2431,5 @@
 !MessageNode class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libcomp/Attic/MessageNd.st,v 1.91 1999-04-24 21:38:34 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libcomp/Attic/MessageNd.st,v 1.92 1999-05-21 15:39:03 cg Exp $'
 ! !
--- a/MessageNode.st	Wed May 19 15:07:09 1999 +0200
+++ b/MessageNode.st	Fri May 21 17:39:03 1999 +0200
@@ -1060,21 +1060,19 @@
             ]
         ].
 
-        receiver isBlock ifTrue:[
+        (receiver isBlock 
+        and:[receiver numArgs == 0
+        and:[receiver isInlinable]]) ifTrue:[
             selector == #value ifTrue:[
                 receiver codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
                 ^ self
             ].
             ((selector == #whileTrue) or:[selector == #whileFalse]) ifTrue:[
-                receiver isInlinable ifTrue:[
-                    ^ self codeWhileOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
-                ]
+                ^ self codeWhileOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
             ].
             (selector == #repeat) ifTrue:[
-                receiver isInlinable ifTrue:[
-                    valueNeeded ifFalse:[
-                        ^ self codeRepeatOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
-                    ]
+                valueNeeded ifFalse:[
+                    ^ self codeRepeatOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
                 ]
             ].
         ].
@@ -1094,7 +1092,9 @@
              ].
         ].
 
-        (arg1 isBlock and:[arg1 isInlinable]) ifTrue:[
+        (arg1 isBlock 
+        and:[arg1 isInlinable
+        and:[arg1 numArgs == 0]]) ifTrue:[
             ((selector == #ifTrue:) or:[selector == #ifFalse:]) ifTrue:[
                 receiver isBlock ifFalse:[
                     ^ self codeIfOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
@@ -1117,7 +1117,9 @@
             ].
 
             ((selector == #whileTrue:) or:[selector == #whileFalse:]) ifTrue:[
-                (receiver isBlock and:[receiver isInlinable]) ifTrue:[
+                (receiver isBlock 
+                and:[receiver isInlinable
+                and:[receiver numArgs == 0]]) ifTrue:[
                     ^ self codeWhileOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
                 ]
             ]
@@ -1139,16 +1141,21 @@
     (nargs == 2) ifTrue:[
         ((selector == #ifTrue:ifFalse:) or:[selector == #ifFalse:ifTrue:]) ifTrue:[
             receiver isBlock ifFalse:[
-                (arg1 isBlock and:[arg1 isInlinable]) ifTrue:[
-                    (arg2 isBlock and:[arg2 isInlinable]) ifTrue:[
-                        ^ self codeIfElseOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
-                    ]
+                (arg1 isBlock 
+                and:[arg1 isInlinable
+                and:[arg1 numArgs == 0
+                and:[arg2 isBlock 
+                and:[arg2 isInlinable
+                and:[arg2 numArgs == 0]]]]]) ifTrue:[
+                    ^ self codeIfElseOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
                 ]
             ]
         ].
 
         selector == #to:do: ifTrue:[
-            (arg2 isBlock and:[arg2 isInlinable and:[arg2 numArgs == 1]]) ifTrue:[
+            (arg2 isBlock 
+            and:[arg2 isInlinable 
+            and:[arg2 numArgs == 1]]) ifTrue:[
                 ^ self codeToDoOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
             ]
         ].
@@ -1161,12 +1168,11 @@
         selector == #to:by:do: ifTrue:[
             "/ step must be a constant (need to know how to compare)
             (arg2 isConstant 
-            and:[arg2 type == #Integer]) ifTrue:[
-                (arg3 isBlock 
-                and:[arg3 isInlinable 
-                and:[arg3 numArgs == 1]]) ifTrue:[
-                    ^ self codeToByDoOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
-                ]
+            and:[arg2 type == #Integer
+            and:[arg3 isBlock 
+            and:[arg3 isInlinable 
+            and:[arg3 numArgs == 1]]]]) ifTrue:[
+                ^ self codeToByDoOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
             ]
         ].
     ].
@@ -2425,5 +2431,5 @@
 !MessageNode class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libcomp/MessageNode.st,v 1.91 1999-04-24 21:38:34 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libcomp/MessageNode.st,v 1.92 1999-05-21 15:39:03 cg Exp $'
 ! !