oops - care for block-num-args being correct when
inlining #while, #timesRepeat etc.
--- 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 $'
! !