# HG changeset patch # User Claus Gittinger # Date 927301143 -7200 # Node ID 4afe809029f6770e65aa73357da8081a0bc8b22f # Parent 316a2bfa5e82721f5d8524e4d93584b6f20c0447 oops - care for block-num-args being correct when inlining #while, #timesRepeat etc. diff -r 316a2bfa5e82 -r 4afe809029f6 MessageNd.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 $' ! ! diff -r 316a2bfa5e82 -r 4afe809029f6 MessageNode.st --- 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 $' ! !